/**
 * 
 */
package com.xpec.c4.game.cronjob;

import java.util.Date;

import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

import com.xpec.c4.service.module.BasicServiceModule;

/**
 * 只是拿來觸發 cron job 的 class 再 call 回 {@link BasicServiceModule} 執行指定的 task
 * 
 * @author TW15010
 */
public class CronTaskExecuteJob implements Job {
	@Override
	public void execute(JobExecutionContext arg0) throws JobExecutionException {
		if (arg0 == null) {
			return;
		}

		// 取得 job detail 中記錄的 task 物件
		JobDataMap dataMap = arg0.getJobDetail().getJobDataMap();
		CronTaskTimer cronTask = (CronTaskTimer) dataMap.get(CronJobManager.TASK_OBJECT_KEY);

		//把這次觸發時間設定進去
		cronTask.setFireTime(arg0.getFireTime().getTime());
		
		Date lastTime = arg0.getPreviousFireTime();
		//上次觸發設定進去
		cronTask.setLastFireTime(lastTime == null ? 0 : lastTime.getTime());
		
		//設定下次觸發時間
		cronTask.setNextFireTime(arg0.getNextFireTime().getTime());
		
		// 丟到所屬的 module 中執行
		cronTask.getModuleServer().addTaskObject(cronTask);

		// 如果有設定執行次數
		if (cronTask.getRunCount() != CronTaskTimer.LOOP) {
			cronTask.setRunCount(cronTask.getRunCount() - 1);
			if (cronTask.getRunCount() <= 0) {
				CronJobManager.getInstance().unregisterJob(cronTask);
			}
		}
	}
}
